//
//  FMDBManager.swift
//  weibo1
//
//  Created by 李进 on 15/11/2.
//  Copyright © 2015年 李进. All rights reserved.
//

import Foundation

//命名数据库的名称
private let dbName = "readme.db"

class FMDBManager {
    
    
    //首先创建单例对象／／这边方便外面调用来诸如数据
   static let shareManager = FMDBManager()
    //创建全局duilie
    let queue: FMDatabaseQueue
    //实现打开服务器方法/在构造函数中实现
    init(){
       
        //在沙盒中获取数据库／如果在沙盒中查找不到就会自动生成数据库
        var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        
        //拼接数据库的名称路径
        path = (path as NSString).stringByAppendingPathComponent(dbName)
        
        //然后打开数据库队列/也就是打开数据库
        queue = FMDatabaseQueue(path: path)
        
        //然后执行创建图片 sql指令／创建 sql 创建图表的指令文件
        createTable()
        
    }
    
    //MARK: 创建数据库中的数据表结构
    func createTable(){
        
        //获取sql 指令文件的路径
        let path = NSBundle.mainBundle().pathForResource("db.sql", ofType: nil)!
        
        //加载路径文件中的 sql指令
        let sql = try! String(contentsOfFile: path)
        
        //创建table表格
        queue.inDatabase { (db) -> Void in
            
            //在这边使用数据操作／来执行多条sql指令/返回值是bool 是返回是否执行成功
            if db.executeStatements(sql) {
                print("创建表格成功")
            }else{
                print("创建表格失败")
            }
            
        }
    }
    
    //MARK: 查询数据／也就是获取数据库中的数据
    func execRecordSet(sql: String) -> [[String : AnyObject]]{
        
        
        var array = [[String : AnyObject]]()
        //所有的执行都依赖以duilie
        FMDBManager.shareManager.queue.inDatabase { (db) -> Void in
            
            //这边使用查询方法
            //
            //这边要实现时将数据库中的数据读取出来转化成数组
            guard let rs = db.executeQuery(sql) else{
                print("没有数据")
                return
            }
            
            
            //执行单步记录
            while rs.next() {
                
                //获取计录的列数
                let colCount = rs.columnCount()
                var dic = [String : AnyObject]()
                //遍历
                for col in 0..<colCount {
                    
                    //获取列名
                    let name = rs.columnNameForIndex(col)
                    
                    //获取列所对应的值
                    let obj = rs.objectForColumnIndex(col)
                    
                    dic[name] = obj
                }
                array.append(dic)
            }
        }
        return array
    }
}